package com.fanyouzhao.ehome.dao;


import com.fanyouzhao.ehome.entity.Cp;
import com.fanyouzhao.ehome.entity.User;

import java.util.List;

/**
 * 实现User持久化方面的操作接口
 *
 * @author fanyouzhao
 * @date 2021年3月31日 下午4:52:07
 */
public interface UserDao {

	/**
	 * 添加用户对象的方法
	 *
	 * @param user 目标用户对象
	 * @return 返回影响的行数
	 * @throws Exception
	 */
	Integer insert(User user) throws Exception;// 已实现BaseDao,已测试

	/**
	 * 根据id删除用户的方法
	 *
	 * @param id 目标用户的id
	 * @return 返回影响的行数
	 * @throws Exception
	 */
	Integer deleteById(Integer id) throws Exception;// 已实现BaseDao,已测试

	/**
	 * 根据name删除用户的方法
	 *
	 * @param username 目标用户的name
	 * @return 返回影响的行数
	 * @throws Exception
	 */
	Integer deleteByUsername(String username) throws Exception;// 已实现BaseDao,已测试

	/**
	 * 修改目标User的方法
	 *
	 * @param id   目标用户的id
	 * @param user 要修改的特征所封装的User对象
	 * @return
	 * @throws Exception
	 */
	Integer update(Integer id, User user) throws Exception; // 已实现BaseDao,已测试

	/**
	 * 根据id查询user对象的方法
	 *
	 * @param id 目标用户的编号
	 * @return 返回id对应的User对象, 如果没有找到则返回null
	 * @throws Exception
	 */
	User selectById(Integer id) throws Exception;// 已实现BaseDao,已测试

	/**
	 * 根据name查询User对象的方法
	 *
	 * @param name 目标用户的姓名(唯一的)
	 * @return 返回id对应的User对象, 如果没有找到则返回null
	 * @throws Exception
	 */
	User selectByName(String name) throws Exception;// 已实现BaseDao,已测试

	/**
	 * 根据username查询User对象的方法
	 *
	 * @param phone 目标用户的姓名(唯一的)
	 * @return 返回id对应的User对象, 如果没有找到则返回null
	 * @throws Exception
	 */
    User selectByPhone(String phone) throws Exception;

	/**
	 * 根据username查询User对象的方法
	 *
	 * @param username 目标用户的姓名(唯一的)
	 * @return 返回id对应的User对象, 如果没有找到则返回null
	 * @throws Exception
	 */
	User selectByUsername(String username) throws Exception;

    /**
	 * 全查询
	 *
	 * @return 返回查询到的所有用户的集合
	 * @throws Exception
	 */
	List<User> selectAll() throws Exception;// 已实现BaseDao,已测试

	List<User> selectLikeNameorPhoneByPage(String searchString, int page, int size) throws Exception;

	Integer getCpn(Integer cpId,String phone)throws Exception;

	/**
	 * 分页查询
	 *
	 * @param page 要显示的页数
	 * @param size 每页记录数
	 * @return 分页查找到的数据,并添加到集合中
	 * @throws Exception
	 */
	List<User> selectByPage(int page, int size) throws Exception; // 已实现BaseDao,已测试

	List<Cp> selectCpsNotUsedByPhone(String phone) throws Exception;
	List<Cp> selectCpsUsedByPhone(String phone) throws Exception;

	//查询某用户未领取的优惠券
	List<Cp> selectNotGetCpsByPhone(String phone) throws Exception;

	//查询某用户已领取的优惠券
	List<Cp> selectGetCpsByPhone(String phone) throws Exception;

	//查询某用户已过期的优惠券
	List<Cp> selectOverExpireCpsByPhone(String phone) throws Exception;

	Integer getCount() throws Exception;

	Integer getCountSearch(String searchString) throws Exception;

}
